From: Matthieu Gallien Date: Wed, 28 May 2025 15:14:46 +0000 (+0200) Subject: fix(readonly): avoid implicit hydration when modifying permissions X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1^2~13^2~1^2~25^2~2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=2d9e9a007f30fa0593c68c5924bb59d97514cd1e;p=nextcloud-desktop.git fix(readonly): avoid implicit hydration when modifying permissions Signed-off-by: Matthieu Gallien --- diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index c2a7b8ed5..515d02b15 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -474,7 +474,17 @@ bool FileSystem::setFolderPermissions(const QString &path, const auto childFiles = currentFolder.entryList(QDir::Filter::Files); for (const auto &oneEntry : childFiles) { const auto childFile = QDir::toNativeSeparators(path + QDir::separator() + oneEntry); - if (!SetFileSecurityW(childFile.toStdWString().c_str(), info, &newSecurityDescriptor)) { + + const auto &childFileStdWString = childFile.toStdWString(); + const auto attributes = GetFileAttributes(childFileStdWString.c_str()); + + // testing if that could be a pure virtual placeholder file (i.e. CfApi file without data) + // we do not want to trigger implicit hydration ourself + if ((attributes & FILE_ATTRIBUTE_SPARSE_FILE) != 0) { + continue; + } + + if (!SetFileSecurityW(childFileStdWString.c_str(), info, &newSecurityDescriptor)) { qCWarning(lcFileSystem) << "error when calling SetFileSecurityW" << childFile << GetLastError(); return false; }